﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using DAL.Entities;
using BAL;
using Common.Enums;

namespace GrouponDesktop.CargaCredito
{
    public partial class CargaCreditoFrm : Form
    {
        private string _fechaActual;
        private ClienteBAL _bal;
        private ClienteEntity _cliente;

        public CargaCreditoFrm(UsuarioEntity usuario)
        {
            InitializeComponent();
            this.CancelButton = this.btnCancelar;
            _bal = new ClienteBAL();
            _cliente = this._bal.GetClienteByUserId(usuario.IntIdUsuario);

            //Seteo los controles que poseen datos del cliente y del sistema
            _fechaActual = ConfigurationSettings.AppSettings["actualDate"].ToString();
            this.lblFecha.Text = _fechaActual;
            this.lblUsuario.Text += usuario.VarUsername;

            this.CargarCliente();
            this.CargarMediosDePago();
        }

        private void CargarCliente()
        {
            this.txtNombre.Text = _cliente.VarNombre;
            this.txtApellido.Text = _cliente.VarApellido;
            this.txtTel.Text = _cliente.BigTelefono.ToString();
            this.txtDni.Text = _cliente.BigDNI.ToString();
            this.txtSaldoActual.Text = _cliente.FloatSaldo.ToString();
        }

        private void CargarMediosDePago()
        {
            this.cmboTipoPago.DataSource = TipoPagosBAL.ObtenerMediosPago();

            this.cmboTipoPago.DisplayMember = "Nombre";
            this.cmboTipoPago.ValueMember = "Id";
        }

        private void btnConfirmar_Click(object sender, EventArgs e)
        {
            double auxMonto = Convert.ToDouble(this.txtMonto.Text);
            float monto = (float)auxMonto;
            int tipoPago;
            int idTarjeta;

            try
            {
                if (monto >= 15.00)
                {
                    tipoPago = Convert.ToInt32(this.cmboTipoPago.SelectedValue);

                    //Si tipo de pago es tarjeta
                    if ((tipoPago == 2) || (tipoPago == 3))
                    {
                        bool debito = tipoPago == 3 ? true : false;
                        using (TarjetaFrm frm = new TarjetaFrm(_cliente, debito))
                        {
                            this.Hide();
                            frm.ShowDialog(this);
                            this.Show();

                            //si el usuario apreto cancelar en el form de tarjeta se detiene la ejecucion
                            if (frm.Error)
                                return;

                            idTarjeta = _bal.AddTarjeta(frm.NroTarjeta, frm.Tipo, frm.Codigo);
                        }
                    }
                    else
                    {
                        //Si el tipo de pago es efectivo
                        idTarjeta = 0;
                    }

                    //Hago efectiva la carga
                    _bal.ExecuteCarga(_fechaActual, monto, _cliente.IntIdCliente, tipoPago, idTarjeta);
                    MessageBox.Show("La carga se realizo exitosamente", "Cargar Credito", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
                else
                {
                    MessageBox.Show("El monto a cargar debe ser mayor a $15", "Cargar Credito", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Ha ocurrido un error. {0}", ex.Message), "Cargar Credito", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
